import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationObserver;

import javax.swing.*;
import java.io.File;

/**
 * 文件变化监听器
 *
 * 在Apache的Commons-IO中有关于文件的监控功能的代码. 文件监控的原理如下：
 * 由文件监控类FileAlterationMonitor中的线程不停的扫描文件观察器FileAlterationObserver，
 * 如果有文件的变化，则根据相关的文件比较器，判断文件时新增，还是删除，还是更改。（默认为1000毫秒执行一次扫描）
 *
 *
 */
public class FileListener  extends FileAlterationListenerAdaptor {
    private JTextArea txtArInfo;
    public FileListener(JTextArea txtArInfo){
        this.txtArInfo=txtArInfo;
    }
    /**
     * 文件创建执行
     */
    public void onFileCreate(File file) {
        txtArInfo.append(
                MainFrame.appendTextWrap("[新建-文件]:" + file.getAbsolutePath())
        );
        txtArInfo.append(
                MainFrame.appendTextWrap("[执行任务]:cmd /c start D:\\krpano-1.20.8\\krpanotools.exe makepano -config=templates\\vtour-customer-normal.config  "+file.getAbsolutePath())
        );
        Runtime runtime = Runtime.getRuntime();
        boolean b = true;
        Process p = null;
        try {
            p=runtime.exec("cmd /c start D:\\krpano-1.20.8\\krpanotools.exe makepano -config=templates\\vtour-customer-normal.config  "+file.getAbsolutePath());
            p.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
            b = false;
        }finally {
            p.destroy();
        }
    }

    /**
     * 文件创建修改
     */
    public void onFileChange(File file) {

        txtArInfo.append(
                MainFrame.appendTextWrap("[修改-文件]:" + file.getAbsolutePath())
        );
    }

    /**
     * 文件删除
     */
    public void onFileDelete(File file) {
        txtArInfo.append(
                MainFrame.appendTextWrap("[删除-文件]:" + file.getAbsolutePath()+"\r\n")
        );
    }

    /**
     * 目录创建
     */
    public void onDirectoryCreate(File directory) {
        txtArInfo.append(
                MainFrame.appendTextWrap("[新建-文件夹]:" + directory.getAbsolutePath()+"\r\n")
        );
    }

    /**
     * 目录修改
     */
    public void onDirectoryChange(File directory) {
        txtArInfo.append(
                MainFrame.appendTextWrap("[修改-文件夹]:" + directory.getAbsolutePath()+"\r\n")
        );
    }

    /**
     * 目录删除
     */
    public void onDirectoryDelete(File directory) {
        txtArInfo.append(
                MainFrame.appendTextWrap("[删除-文件夹]:" + directory.getAbsolutePath()+"\r\n")
        );
    }

    public void onStart(FileAlterationObserver observer) {
        super.onStart(observer);
    }

    public void onStop(FileAlterationObserver observer) {
        super.onStop(observer);
    }


}
